package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

/**
 * 信用通知服务接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface ICreditNotificationService 
{
    /**
     * 发送信用分变化通知
     * @param userId 用户ID
     * @param oldScore 原信用分
     * @param newScore 新信用分
     * @param reason 变化原因
     */
    void sendScoreChangeNotification(Long userId, Integer oldScore, Integer newScore, String reason);
    
    /**
     * 发送服务使用通知
     * @param userId 用户ID
     * @param serviceName 服务名称
     * @param serviceType 服务类型
     */
    void sendServiceUsageNotification(Long userId, String serviceName, String serviceType);
    
    /**
     * 发送系统公告
     * @param title 公告标题
     * @param content 公告内容
     * @param targetUserIds 目标用户ID列表，为空则发送给所有用户
     */
    void sendSystemAnnouncement(String title, String content, List<Long> targetUserIds);
    
    /**
     * 获取用户通知列表
     * @param userId 用户ID
     * @param isRead 是否已读（null表示全部）
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 通知列表
     */
    Map<String, Object> getUserNotifications(Long userId, Boolean isRead, Integer pageNum, Integer pageSize);
    
    /**
     * 标记通知为已读
     * @param notificationId 通知ID
     * @param userId 用户ID
     */
    void markAsRead(Long notificationId, Long userId);
    
    /**
     * 批量标记通知为已读
     * @param notificationIds 通知ID列表
     * @param userId 用户ID
     */
    void batchMarkAsRead(List<Long> notificationIds, Long userId);
    
    /**
     * 删除通知
     * @param notificationId 通知ID
     * @param userId 用户ID
     */
    void deleteNotification(Long notificationId, Long userId);
    
    /**
     * 获取未读通知数量
     * @param userId 用户ID
     * @return 未读数量
     */
    Integer getUnreadCount(Long userId);
} 